package com.jl.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jl.commons.result.PageDataInfo;
import com.jl.commons.shiro.ShiroUser;
import com.jl.model.Model;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 设备型号表 服务类
 * </p>
 *
 * @author JiangJian
 * @since 2019-03-06
 */
public interface IModelService extends IService<Model> {

    /**
     * 分页查询设备型号
     * @param pageDataInfo 分页配置信息
     * @param qw 筛选条件
     * @return
     */
    void selectModelDataGrid(PageDataInfo<Map<String,Object>> pageDataInfo, QueryWrapper<Model> qw);


    /**
     * 新增设备类型信息的同时，同步插入 部位-配件 的多对多信息
     * @param model 设备类型信息，携带了绑定的配件列表信息
     */
    boolean saveModelWithComponents(Model model);


    /**
     * 1、获得所有新增加的配件和减少的配件。
     * 2、先将新增加的数据插入到model_component表中，将减少的内容从part_component表中删除。
     * 3、获取所有绑定了该部位的设备(因为如果之前绑定了该部位，则表示device_component中的配件信息和该部位的配件是一致的)的相关信息，如启用时间等
     * 4、将新增加的配件数据插入到device_component的表中，将减少的内容从device_component表中删除。
     * 5、这里的配件启用时间默认是重设备的启用时间。设备启用了零件才能启用。（也可以单独编辑）
     * @param model 设备类型信息
     * @return
     */
    boolean updateModelWithComponents(ShiroUser currentUser, Model model);

    /**
     * 查找名称是否被占用
     * @param name
     * @return
     */
    boolean isModelNameUsed(String name);

    boolean  isModelNameCanUse(String name,Long modelId);

    Model selectModelByDeviceId(Long deviceId);
}
